package mySqlite

//参考了E:\web\go example\sqlitego
import (
	"database/sql"
	"encoding/json"
	"fmt"
	_ "github.com/mattn/go-sqlite3"
	"io/ioutil" //用来读取post中的body
	"net/http"
	"os"
)

//==========================================================================
//=========判断数据库文件是否存在，第一次打开不存在时就新建一个数据库与其上的表
//=========================================================================
func Init() {
	_, err := os.Stat("./datebase/webTuzhi.db") //判断文件是否存在
	if err != nil {
		// no such file or dir，不存在，就初始化创建一些表
		db, err := sql.Open("sqlite3", "./datebase/webTuzhi.db") //建立或打开数据库
		checkErr(err)
		//新建一张表
		_, err = db.Exec("CREATE TABLE `userinfo`" +
			" (`Uid` INTEGER PRIMARY KEY AUTOINCREMENT," + //主键自动增长
			"`LoginName` VARCHAR(64) NULL UNIQUE," + //唯一
			"`CName` VARCHAR(64) NULL," +
			"`PWord` VARCHAR(64) NULL," +
			"`CreateTime` VARCHAR(64) NULL)")
		// insert
		stmt, err := db.Prepare("INSERT INTO userinfo(LoginName, CName,PWord, CreateTime) values(?,?,?,?)")
		checkErr(err)

		res, err := stmt.Exec("wmy", "伍明煜", "1989112", "2012-12-09")
		checkErr(err)

		id, err := res.LastInsertId()
		checkErr(err)

		fmt.Println(id)
		db.Close()
		fmt.Println("数据库初始化成功--mySqlite_main.go")
	}
	fmt.Println("数据库已存在--mySqlite_main.go")
}

//==============验证登录信息是否与数据库一致======================
//接收的数据结构
///restful/loginCheck/发过来的用户信息
type UserMsg struct {
	LoginName string
	Pword     string
}

//发送的数据结构
type UserSend struct {
	CName string //用户的中文名，或者错误提示cant find user/pword
}

func LoginCheck(w http.ResponseWriter, r *http.Request) {
	fmt.Println("/restful/loginCheck/")
	userSend := &UserSend{} //初始化
	userMsg := &UserMsg{}

	//读取post的数据
	jsonResult, _ := ioutil.ReadAll(r.Body)
	r.Body.Close()
	json.Unmarshal([]byte(jsonResult), userMsg) //注意json字段要大写
	fmt.Println(userMsg)

	//根据post请求查找数据库,以登录名查找
	db, err := sql.Open("sqlite3", "./datebase/webTuzhi.db") //建立或打开数据库
	find, err := db.Prepare("SELECT * FROM userinfo where LoginName=?")
	checkErr(err)
	rows, err := find.Query(userMsg.LoginName)
	var Uid int
	var LoginName string
	var CName string
	var PWord string
	var CreateTime string
	for rows.Next() {
		err = rows.Scan(&Uid, &LoginName, &CName, &PWord, &CreateTime)
		checkErr(err)
		fmt.Println(LoginName)
		fmt.Println(CName)
		fmt.Println(PWord)
		fmt.Println(CreateTime)
	}
	if LoginName != userMsg.LoginName {
		userSend.CName = "cant find user" //不能找到用户
	} else if PWord != userMsg.Pword { //如果用户名存在，密码不正确
		userSend.CName = "cant find pword" //密码不正确
	} else { //密也正确了
		userSend.CName = CName //发送查找到的中文名字
	}
	db.Close()

	//返回指示请求
	b, err := json.Marshal(userSend) //用这个函数时一定要确保字段名首位大写
	checkErr(err)
	//给浏览器发送json
	fmt.Fprintf(w, string(b)) //必须要string,确保没发送其他了否则解释不了为json在angular
}

//=========================================================================
func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}
